package com.happok.onlineclass.usermanagement.user.service;

import com.happok.common.page.PageResponse;
import com.happok.onlineclass.usermanagement.common.dto.IdDTO;
import com.happok.onlineclass.usermanagement.user.dto.*;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.net.URISyntaxException;
import java.util.List;

/**
 * 功能说明
 *
 * @author : chenac
 * @version : v1.0
 * @date : 2021/7/15 10:43
 * @updateUser : chenac
 * @updateTime : 2021/7/15 10:43
 * @updateRemark : 无
 * @since : Springboot 2.5.2
 */
public interface ManageUserService {

    /**
     * 添加用户
     *
     * @param addUserDTO 添加用户参数
     * @author: chenac
     * @date: 10:46
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.common.dto.IdDTO
     */
    IdDTO addUser(String user, AddUserDTO addUserDTO) throws Exception;

    /**
     * 修改用户信息
     *
     * @param userId              用户id
     * @param manageUpdateUserDTO 管理员更新用户参数
     * @author: chenac
     * @date: 10:46
     * @execption:
     * @return: void
     */
    void updateUserByUserId(String user,
                            Integer userId,
                            ManageUpdateUserDTO manageUpdateUserDTO) throws Exception;

    /**
     * 禁启用用户
     *
     * @param userId        用户id
     * @param enableUserDTO
     * @author: chenac
     * @date: 10:58
     * @execption:
     * @return: void
     */
    void enableUserByUserId(Integer userId,
                            EnableUserDTO enableUserDTO);

    /**
     * 检测用户账号
     *
     * @param checkAccountDTO 检测用户账号参数
     * @author: chenac
     * @date: 10:59
     * @execption:
     * @return: void
     */
    void checkAccount(CheckAccountDTO checkAccountDTO);

    /**
     * 查询用户列表
     *
     * @param listUserParamDTO 查询用户列表筛选条件
     * @author: chenac
     * @date: 11:00
     * @execption:
     * @return: com.happok.common.page.PageResponse<com.happok.onlineclass.usermanagement.user.dto.ListUserDTO>
     */
    PageResponse<ListUserDTO> listUser(ListUserParamDTO listUserParamDTO) throws URISyntaxException;

    /**
     * 查询用户列表
     *
     * @param userIds
     * @author: chenac
     * @date:  14:00
     * @execption:
     * @return: java.util.List<com.happok.onlineclass.usermanagement.user.dto.UserSimpleDTO>
     */
    List<UserSimpleDTO> listUser(List<Integer> userIds);

    /**
     * 查询用户列表
     *
     * @param userIds
     * @author: chenac
     * @date:  14:00
     * @execption:
     * @return: java.util.List<com.happok.onlineclass.usermanagement.user.dto.UserSimpleDTO>
     */
    List<ListUserDTO> listUserBasicInfo(List<Integer> userIds);

    /**
     * 查询用户详情
     *
     * @param userId 用户id
     * @author: chenac
     * @date: 11:00
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.user.dto.UserDetailDTO
     */
    UserDetailDTO getUserDetailById(Integer userId) throws URISyntaxException;

    /**
     * 重置密码-管理员重置普通用户密码
     *
     * @param resetPwdDTO
     * @author: chenac
     * @date:  15:21
     * @execption:
     * @return: void
     */
    void resetPassword(@RequestBody @Valid ResetPwdDTO resetPwdDTO);
}